package org.zoomdev.zoom;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.servlet.FilterHolder;
import org.eclipse.jetty.util.thread.QueuedThreadPool;
import org.eclipse.jetty.webapp.WebAppContext;
import org.zoomdev.zoom.common.utils.PathUtils;

import javax.servlet.*;
import java.io.IOException;
import java.util.EnumSet;

//TIP 要<b>运行</b>代码，请按 <shortcut actionId="Run"/> 或
// 点击装订区域中的 <icon src="AllIcons.Actions.Execute"/> 图标。
public class Main {
    public static void main(String[] args) throws Exception {
        // 1. 创建 Jetty 服务器实例，监听 8080 端口
        QueuedThreadPool threadPool = new QueuedThreadPool();
        threadPool.setMinThreads(20);      // 最小空闲线程
        threadPool.setMaxThreads(200);     // 最大工作线程
        threadPool.setIdleTimeout(60000);  // 空闲超时(ms)


        Server server = new Server(threadPool);

// 创建连接器并指定端口
        ServerConnector connector = new ServerConnector(server);
        connector.setPort(8080);  // 明确指定监听8080端口
        connector.setAcceptQueueSize(4096);     // 连接等待队列
        connector.setIdleTimeout(30000);        // 空闲超时
        connector.setReuseAddress(true);        // 启用端口复用

        server.addConnector(connector);  // 将连接器附加到服务器


        WebAppContext webAppContext = new WebAppContext();
        webAppContext.setContextPath("/");
        webAppContext.setResourceBase(PathUtils.getRootPath());
        Filter filter= new Filter() {
            @Override
            public void doFilter(ServletRequest request, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
                servletResponse.getWriter().print("hello world");
            }

            @Override
            public void init(FilterConfig filterConfig) throws ServletException {

            }
        };
        webAppContext.addFilter(new FilterHolder(filter), "/*", EnumSet.of(DispatcherType.REQUEST));
        // 4. 将上下文处理器绑定到服务器
        webAppContext.setInitParameter("org.eclipse.jetty.servlet.Default.dirAllowed", "false");
        webAppContext.setInitParameter("org.eclipse.jetty.servlet.Default.useFileMappedBuffer", "false");
        webAppContext.setInitParameter("gzip", "true");  // 启用压缩



        server.setHandler(webAppContext);
        // 5. 启动服务器
        server.start();
        server.join();
    }
}